#ifndef __LINKLIST_H__
#define __LINKLIST_H__

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct db_lnode
{
	void* data;
	struct db_lnode* prev;
	struct db_lnode* next;
}node_t;

typedef struct db_list
{
	int size;
	node_t * head;
	node_t * tail;
}list_t;



void list_init(list_t *list);
int list_get_len(list_t *list);
void * new_data(uint16_t bytes);
void destroy_data(void * data);
node_t * new_node(void *data);
int list_append(list_t *list, void *data);
int list_get(list_t *list, int pos, void **data_ptr);
int list_get_head(list_t *list, void **data_ptr);
int list_get_tail(list_t *list, void **data_ptr);
int list_pop(list_t *list, int pos);
int list_pop_tail(list_t *list);
int list_pop_head(list_t *list);
int list_pop_get(list_t *list, int pos, void **data_ptr);
int list_pop_get_head(list_t *list, void **data_ptr);
int list_pop_get_tail(list_t *list, void **data_ptr);
void list_destroy_node(list_t *list, int pos);

#endif


